#include "head.h"

//设定航班
void Set_Up_Flights(F_list * Flight_list)
{
    D_List_print(Flight_list); //打印航班
    F_data data;
    printf("请输入航班id:\n");
    scanf("%d", &data.id);
    while(D_List_find_id(Flight_list, data.id) != NULL)
    {
        printf("id重复,请重新输入航班id:\n");
        scanf("%d", &data.id);
    }
    puts("请输入机型:");
    scanf("%s", data.flighttype);
    puts("请输入起点:");
    scanf("%s", data.startcity);
    puts("请输入终点:");
    scanf("%s", data.arrivecity);
    puts("请输入起飞时间:");
    scanf("%d:%d", &data.starttime[0], &data.starttime[1]);
    puts("请输入到达时间:");
    scanf("%d:%d", &data.arrivetime[0], &data.arrivetime[1]);
    puts("请输入飞行时间:");
    scanf("%s", data.flytime);
    puts("请输入票价:");
    scanf("%d", &data.value);
    puts("请输入核载量:");
    scanf("%d", &data.maxNUM);
    puts("请输入剩余座次:");
    scanf("%d", &data.leftbuyersa);
    puts("请输入是否起飞: y/n");
    data.whetherfly = ' ';
    while((data.whetherfly != 'y') && data.whetherfly != 'n')
    {
        data.whetherfly = getchar();
    }
    D_Tail_List_insert(Flight_list, data);
}

//删除航班
void Remove_Flights(F_list * Flight_list)
{
    D_List_print(Flight_list); //打印航班
    int id;
    printf("请输入删除航班的id:\n");
    scanf("%d", &id);

    F_node * data = D_List_find_id(Flight_list, id); //查找航班
    if(data == NULL)
    {
        printf("无该航班\n");
        setbuf(stdin, NULL);
        scanf("%*c");
        return;
    }
    
    D_List_delete(Flight_list, D_List_By_id_find_pos(Flight_list, id));
    printf("删除成功\n");
    Press_Enter_To_Continue();
}

//修改航班
void Modify_Your_Flight(F_list * Flight_list)
{
    system("clear"); //清屏
    D_List_print(Flight_list); //打印航班

    int id;
    printf("请输入修改的要修改的id\n");
    scanf("%d", &id);
    F_node * data = D_List_find_id(Flight_list, id); //查找航班
    if(data == NULL)
    {
        printf("无该航班\n");
        setbuf(stdin, NULL);
        scanf("%*c");
        return;
    }

    printf("请输入航班id:\n");
    data->data.id = -1; //id判重,当前航班不参与
    scanf("%d", &id);
    while(D_List_find_id(Flight_list, id) != NULL)
    {
        printf("id重复,请重新输入航班id:\n");
        scanf("%d", &id);
    }
    //数据修改
    data->data.id = id; //数据恢复
    puts("请输入机型:");
    scanf("%s", data->data.flighttype);
    puts("请输入起点:");
    scanf("%s", data->data.startcity);
    puts("请输入终点:");
    scanf("%s", data->data.arrivecity);
    puts("请输入起飞时间:");
    scanf("%d:%d", &data->data.starttime[0], &data->data.starttime[1]);
    puts("请输入到达时间:");
    scanf("%d:%d", &data->data.arrivetime[0], &data->data.arrivetime[1]);
    puts("请输入飞行时间:");
    scanf("%s", data->data.flytime);
    puts("请输入票价:");
    scanf("%d", &data->data.value);
    puts("请输入核载量:");
    scanf("%d", &data->data.maxNUM);
    puts("请输入剩余座次:");
    scanf("%d", &data->data.leftbuyersa);
    puts("请输入是否起飞: y/n");
    data->data.whetherfly = ' ';
    while((data->data.whetherfly != 'y') && data->data.whetherfly != 'n')
    {
        data->data.whetherfly = getchar();
    }
    
    //修改成功，写入导文件
    // D_List_file_print(Flight_list)
}

//创建新的用户一个用户
U_data Create_A_User(FlightSystem Flight_sys)
{
    U_data data;
    // 合并五条用户信息,用来判重
    U_list *list = S_List_init();
    list = S_List_merge(list, Flight_sys.ADMIN_USER);    // 管理员账户信息文件
    list = S_List_merge(list, Flight_sys.REGULAR_USER);  // 普通用户信息文件
    list = S_List_merge(list, Flight_sys.SILVER_USER);   // 银卡会员信息文件 (9折)
    list = S_List_merge(list, Flight_sys.GOLD_USER);     // 金卡会员信息文件 (8折)
    list = S_List_merge(list, Flight_sys.PLATINUM_USER); // 白金会员信息文件 (7折)

    puts("请输入修改的信息");
    puts("用户名:\n");
    scanf("%s", data.name);
    while(S_List_find_name(list, data.name) != NULL)
    {
        puts("用户名重复,请重新输入用户名:\n");
        scanf("%s", data.name);
    }

    puts("密码:\n");
    scanf("%s", data.passwd);
    puts("身份码:\n");
    scanf("%d", &data.grade);
    puts("余额:\n");
    scanf("%d", &data.value);
    printf("修改成功\n");
    Press_Enter_To_Continue();
    return data;
}

// 修改普通用户信息
void Modifying_A_Common_User(FlightSystem Flight_sys)
{
    //合并四条普通用户表
    U_list *list = S_List_init();
    list = S_List_merge(list, Flight_sys.REGULAR_USER);  // 普通用户信息文件
    list = S_List_merge(list, Flight_sys.SILVER_USER);   // 银卡会员信息文件 (9折)
    list = S_List_merge(list, Flight_sys.GOLD_USER);     // 金卡会员信息文件 (8折)
    list = S_List_merge(list, Flight_sys.PLATINUM_USER); // 白金会员信息文件 (7折)
    
    S_List_print(list); //打印所有普通用户

    // 请输入需要修改的用户名
    char name[128] = {0};
    puts("请输入需要修改的用户名\n");
    scanf("%s", name);

    U_node *  ptr; //查找用户

    while((ptr = S_List_find_name(list, name)) == NULL)
    {
        puts("无此用户,请重新输入用户名:\n");
        scanf("%s", name);
    }

    U_data data = ptr->data; //修改前的用户数据
    U_list * temp_list = By_Data_Judge_List(Flight_sys, data); //判断当前用户链表

    if(ptr != NULL)
    {
        printf("查找到以下用户信息\n");
        printf("用户名:%s\t密码:%s\t身份码:%d\t余额:%d\n",
            ptr->data.name, ptr->data.passwd, ptr->data.grade, ptr->data.value);
        int pos = By_Name_Out_pos(temp_list, name); //确定删除位置
        S_List_delete(temp_list, pos); //删除
        U_data data = Create_A_User(Flight_sys); //创建一个新的用户
        U_list * temp_list = By_Data_Judge_List(Flight_sys, data); //判断新用户的链表
        S_List_insert(temp_list, data, pos); //插入到对应的链表上面
    }
}

//添加一个管理用户
void Add_Admin_User(FlightSystem Flight_sys)
{
    U_data data;
    // 合并五条用户信息,用来判重
    U_list *list = S_List_init();
    list = S_List_merge(list, Flight_sys.ADMIN_USER);    // 管理员账户信息文件
    list = S_List_merge(list, Flight_sys.REGULAR_USER);  // 普通用户信息文件
    list = S_List_merge(list, Flight_sys.SILVER_USER);   // 银卡会员信息文件 (9折)
    list = S_List_merge(list, Flight_sys.GOLD_USER);     // 金卡会员信息文件 (8折)
    list = S_List_merge(list, Flight_sys.PLATINUM_USER); // 白金会员信息文件 (7折)

    S_List_print(Flight_sys.ADMIN_USER); //打印所有管理用户

    puts("请输入添加的信息");
    puts("用户名:\n");
    scanf("%s", data.name);
    while(S_List_find_name(list, data.name) != NULL)
    {
        puts("用户名重复,请重新输入用户名:\n");
        scanf("%s", data.name);
    }
    puts("密码:\n");
    scanf("%s", data.passwd);
    data.grade = 1;
    puts("余额:\n");
    scanf("%d", &data.value);
    printf("添加成功\n");
    Press_Enter_To_Continue();

    S_List_insert(Flight_sys.ADMIN_USER, data, 1); //插入到对应的链表上面
}